﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using SegIdenMovil.Entidad;
using SegIdenMovil.Herramientas;
using GS1.Library;
using GS1.Tools.Extender;
using SegIdenMovil.Delegate;

namespace SegIdenMovil
{
    public partial class frmListado : Form
    {
        #region --- Varibles y Propiedades ---
        public enum TipoLista
        {
            USUARIO = 0,
            PROVEEDOR = 1,
            CLIENTE = 2,
            TRANSPORTE = 3,
            TIENDA = 4,
            PRODUCTOUNION = 5,
            PRODUCTOCOMPONENTE = 6 //OJO
        }

        public TipoLista TipoListado { get; set; }

        public object ItemSeleccionado { get; set; }

        private object listadoObjetos = null;

        private const string TITULO_BUSQUEDA_PROVEEDOR = "Buscar Proveedor";
        private const string TITULO_BUSQUEDA_CLIENTE = "Buscar Cliente";
        private const string TITULO_BUSQUEDA_TRANSPORTE = "Buscar Transporte";
        private const string TITULO_BUSQUEDA_USUARIO = "Buscar Usuario";
        private const string TITULO_BUSQUEDA_TIENDA = "Buscar Tienda";
        private const string TITULO_BUSQUEDA_PRODUCTOUNION = "Buscar Producto Union";
        private const string TITULO_BUSQUEDA_PRODUCTOCOMPONENTE = "Buscar Producto Componente"; //OJO

        private const string CAMPO_PROV_IDENTIFICACION_CODIGO = "IDENTIFICACION";
        private const string CAMPO_PROV_IDENTIFICAICON_DESCRIPCION = "Identificación";
        private const string CAMPO_PROV_RAZONSOCIAL_CODIGO = "RAZONSOCIAL";
        private const string CAMPO_PROV_RAZONSOCIAL_DESCRIPCION = "Razón Social";

        private const string CAMPO_CLIE_NRODOCUMENTO_CODIGO = "NRODOCUMENTO";
        private const string CAMPO_CLIE_NRODOCUMENTO_DESCRIPCION = "Nº Doc";
        private const string CAMPO_CLIE_RAZONSOCIAL_CODIGO = "RAZONSOCIAL";
        private const string CAMPO_CLIE_RAZONSOCIAL_DESCRIPCION = "Razón Social";

        private const string CAMPO_TRAN_RUC_CODIGO = "RUC";
        private const string CAMPO_TRAN_RUC_DESCRIPCION = "Ruc";
        private const string CAMPO_TRAN_RAZONSOCIAL_CODIGO = "RAZONSOCIAL";
        private const string CAMPO_TRAN_RAZONSOCIAL_DESCRIPCION = "Razón Social";

        private const string CAMPO_USUA_NOMBRES_CODIGO = "NOMBRES";
        private const string CAMPO_USUA_NOMBRES_DESCRIPCION = "Nombres";
        private const string CAMPO_USUA_APELLIDOS_CODIGO = "APELLIDOS";
        private const string CAMPO_USUA_APELLIDOS_DESCRIPCION = "Apellidos";

        private const string CAMPO_TIEN_CODIGO_CODIGO = "CODIGO";
        private const string CAMPO_TIEN_CODIGO_DESCRIPCION = "Código";
        private const string CAMPO_TIEN_NOMBRE_CODIGO = "NOMBRE";
        private const string CAMPO_TIEN_NOMBRE_DESCRIPCION = "Nombre";

        private const string CAMPO_PROD_CODIGO_CODIGOPRODUCTOPROVEEDOR = "CODIGO";
        private const string CAMPO_PROD_CODIGO_DESCRIPCIONPRODUCTOPROVEEDOR = "Código";
        private const string CAMPO_PROD_NOMBRE_CODIGO = "NOMBRE";
        private const string CAMPO_PROD_NOMBRE_DESCRIPCION = "Nombre";

        private const string FORMATO_TOTAL_ENCONTRADOS = "Total encontrados: {0}";

        #endregion

        #region --- Constructor ---
        public frmListado()
        {
            InitializeComponent();
        }
        #endregion

        #region --- Eventos Formulario ---
        private void frmListado_Load(object sender, EventArgs e)
        {
            cargarFormulario();
        }

        private void mnuCancelar_Click(object sender, EventArgs e)
        {
            salir(DialogResult.Cancel);
        }

        private void btnFiltrar_Click(object sender, EventArgs e)
        {
            filtrarContenido();
        }

        private void mnuAceptar_Click(object sender, EventArgs e)
        {
            aceptarSeleccion();
        }

        private void estiloListView_DoubleClick(object sender, EventArgs e)
        {
            aceptarSeleccion();
        }
        #endregion

        #region --- Metodos Propios ---
        private void cargarFormulario()
        {
            ListaGeneral listaCriterio = null;

            try
            {
                Cursor.Current = Cursors.WaitCursor;
                this.WindowState = FormWindowState.Maximized;

                // Instanciando y creando listado de criterios
                listaCriterio = new ListaGeneral();

                if (this.TipoListado == TipoLista.PROVEEDOR)
                {
                    this.Text = TITULO_BUSQUEDA_PROVEEDOR;

                    listaCriterio.Add(new General { codigo = CAMPO_PROV_RAZONSOCIAL_CODIGO, descripcion = CAMPO_PROV_RAZONSOCIAL_DESCRIPCION });
                    listaCriterio.Add(new General { codigo = CAMPO_PROV_IDENTIFICACION_CODIGO, descripcion = CAMPO_PROV_IDENTIFICAICON_DESCRIPCION });

                    this.colCodigo.Text = CAMPO_PROV_IDENTIFICAICON_DESCRIPCION;
                    this.colDescripcion.Text = CAMPO_PROV_RAZONSOCIAL_DESCRIPCION;
                }
                else if (this.TipoListado == TipoLista.CLIENTE)
                {
                    this.Text = TITULO_BUSQUEDA_CLIENTE;

                    listaCriterio.Add(new General { codigo = CAMPO_CLIE_RAZONSOCIAL_CODIGO, descripcion = CAMPO_CLIE_RAZONSOCIAL_DESCRIPCION });
                    listaCriterio.Add(new General { codigo = CAMPO_CLIE_NRODOCUMENTO_CODIGO, descripcion = CAMPO_CLIE_NRODOCUMENTO_DESCRIPCION });

                    this.colCodigo.Text = CAMPO_CLIE_NRODOCUMENTO_DESCRIPCION;
                    this.colDescripcion.Text = CAMPO_CLIE_RAZONSOCIAL_DESCRIPCION;
                }
                else if (this.TipoListado == TipoLista.TRANSPORTE)
                {
                    this.Text = TITULO_BUSQUEDA_TRANSPORTE;
                    
                    listaCriterio.Add(new General { codigo = CAMPO_TRAN_RAZONSOCIAL_CODIGO, descripcion = CAMPO_TRAN_RAZONSOCIAL_DESCRIPCION });
                    listaCriterio.Add(new General { codigo = CAMPO_TRAN_RUC_CODIGO, descripcion = CAMPO_TRAN_RUC_DESCRIPCION });

                    this.colCodigo.Text = CAMPO_TRAN_RUC_DESCRIPCION;
                    this.colDescripcion.Text = CAMPO_TRAN_RAZONSOCIAL_DESCRIPCION;
                }
                else if (this.TipoListado == TipoLista.USUARIO)
                {
                    this.Text = TITULO_BUSQUEDA_USUARIO;

                    listaCriterio.Add(new General { codigo = CAMPO_USUA_NOMBRES_CODIGO, descripcion = CAMPO_USUA_NOMBRES_DESCRIPCION });
                    listaCriterio.Add(new General { codigo = CAMPO_USUA_APELLIDOS_CODIGO, descripcion = CAMPO_USUA_APELLIDOS_DESCRIPCION });

                    this.colCodigo.Text = CAMPO_USUA_NOMBRES_DESCRIPCION;
                    this.colDescripcion.Text = CAMPO_USUA_APELLIDOS_DESCRIPCION;
                }
                else if (this.TipoListado == TipoLista.TIENDA)
                {
                    this.Text = TITULO_BUSQUEDA_TIENDA;

                    listaCriterio.Add(new General { codigo = CAMPO_TIEN_NOMBRE_CODIGO, descripcion = CAMPO_TIEN_NOMBRE_DESCRIPCION });

                    this.colCodigo.Text = CAMPO_TIEN_CODIGO_DESCRIPCION;
                    this.colDescripcion.Text = CAMPO_TIEN_NOMBRE_DESCRIPCION;
                }
                else if (this.TipoListado == TipoLista.PRODUCTOUNION)
                {
                    this.Text = TITULO_BUSQUEDA_PRODUCTOUNION;

                    listaCriterio.Add(new General { codigo = CAMPO_PROD_NOMBRE_CODIGO, descripcion = CAMPO_PROD_NOMBRE_DESCRIPCION });

                    this.colCodigo.Text = CAMPO_PROD_CODIGO_DESCRIPCIONPRODUCTOPROVEEDOR; //codigo 
                    this.colDescripcion.Text = CAMPO_PROD_NOMBRE_DESCRIPCION;
                }
                else if (this.TipoListado == TipoLista.PRODUCTOCOMPONENTE)
                {
                    this.Text = TITULO_BUSQUEDA_PRODUCTOCOMPONENTE;

                    listaCriterio.Add(new General { codigo = CAMPO_PROD_NOMBRE_CODIGO, descripcion = CAMPO_PROD_NOMBRE_DESCRIPCION });

                    this.colCodigo.Text = CAMPO_PROD_CODIGO_CODIGOPRODUCTOPROVEEDOR;
                    this.colDescripcion.Text = CAMPO_PROD_NOMBRE_DESCRIPCION;
                } 

                this.cboFiltro.DataSource = listaCriterio;
                this.cboFiltro.ValueMember = Constantes.GENERAL_CODIGO;
                this.cboFiltro.DisplayMember = Constantes.GENERAL_DESCRIPCION;
                this.cboFiltro.SelectedIndex = 0;

                // Se aplica estilo a listview
                aplicarEstiloGrilla(this.lvwListado, this);

                this.txtFiltro.Focus();
            }
            catch (Exception ex)
            {
                Util.MensajeError(ex, this.Text);
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }

        private void aplicarEstiloGrilla(ListView lvwListado, Form frmFormulario)
        {
            ListViewExv estiloListView = null;

            lvwListado.FullRowSelect = true;

            estiloListView = new ListViewExv(lvwListado, frmFormulario);
            estiloListView.DoubleClick += new EventHandler(estiloListView_DoubleClick);
            estiloListView.SetGridLines();
        }

        private bool validarEntrada()
        {
            this.txtFiltro.Text = this.txtFiltro.Text.Trim();
            if (this.txtFiltro.Text.Equals(string.Empty))
            {
                Util.CampoNecesario(this.txtFiltro, "Debe ingresar el valor de busqueda", this.Text);
                return true;
            }

            if (this.txtFiltro.TextLength < 3)
            {
                Util.CampoNecesario(this.txtFiltro, "Debe ingresar por lo menos 3 caracteres para realizar la busqueda", this.Text);
                return true;
            }

            return false;
        }

        private void filtrarContenido()
        {
            Operacion operacion = null;
            string contenidoXML = string.Empty;

            try
            {
                if (validarEntrada()) { return; }

                Cursor.Current = Cursors.WaitCursor;

                // Estableciendo operacion a ser enviada al Servicio REST
                operacion = new Operacion();
                operacion.numero = obtenerOperacion();

                // Estableciendo filtros de acuerdo al tipo de busqueda
                agregarCriterioOperacion(operacion, this.cboFiltro.SelectedValue.ToString(), this.txtFiltro.Text);

                // Instanciando y ejecutando llamada al ServicioREST
                using (ConexionREST conexionREST = new ConexionREST())
                {
                    contenidoXML = conexionREST.ejecutarOperacion(operacion);
                }

                // Obteniendo Objeto de Error
                OperacionError operacionError = contenidoXML.DeserializarTo<OperacionError>();

                // Validar si hay error
                if (operacionError != null)
                {
                    Util.ShowMessageboxError(operacionError.descripcion);
                    return;
                }

                listadoObjetos = null;

                // Obteniendo Objeto de Lista
                if (this.TipoListado == TipoLista.PROVEEDOR)
                {
                    listadoObjetos = contenidoXML.DeserializarTo<ListaProveedor>();
                }
                else if (this.TipoListado == TipoLista.CLIENTE)
                {
                    listadoObjetos = contenidoXML.DeserializarTo<ListaCliente>();
                }
                else if (this.TipoListado == TipoLista.TRANSPORTE)
                {
                    listadoObjetos = contenidoXML.DeserializarTo<ListaTransporte>();
                }
                else if (this.TipoListado == TipoLista.USUARIO)
                {
                    listadoObjetos = contenidoXML.DeserializarTo<ListaUsuario>();
                }
                else if (this.TipoListado == TipoLista.TIENDA)
                {
                    listadoObjetos = contenidoXML.DeserializarTo<ListaTienda>();
                }
                else if (this.TipoListado == TipoLista.PRODUCTOUNION)
                {
                    listadoObjetos = contenidoXML.DeserializarTo<ListaProducto>();
                }

                else if (this.TipoListado == TipoLista.PRODUCTOCOMPONENTE)
                {
                    listadoObjetos = contenidoXML.DeserializarTo<ListaProducto>();
                }
                               

                cargarGrilla();
            }
            catch (Exception ex)
            {
                Util.MensajeError(ex, this.Text);
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }

        private void cargarGrilla()
        {
            // Limpiando listado
            this.lvwListado.BeginUpdate();
            this.lvwListado.Items.Clear();

            ListViewItem nuevoItem = null;

            if (this.TipoListado == TipoLista.PROVEEDOR)
            {
                foreach (Proveedor proveedor in ((ListaProveedor)this.listadoObjetos).lista)
                {
                    nuevoItem = new ListViewItem(proveedor.identificacion);
                    nuevoItem.SubItems.Add(proveedor.razonSocial);

                    this.lvwListado.Items.Add(nuevoItem);
                }
            }
            else if (this.TipoListado == TipoLista.CLIENTE)
            {
                foreach (Cliente cliente in ((ListaCliente)this.listadoObjetos).lista)
                {
                    nuevoItem = new ListViewItem(cliente.nroDocumento);
                    nuevoItem.SubItems.Add(cliente.razonSocial);

                    this.lvwListado.Items.Add(nuevoItem);
                }
            }
            else if (this.TipoListado == TipoLista.TRANSPORTE)
            {
                foreach (Transporte transporte in ((ListaTransporte)this.listadoObjetos).lista)
                {
                    nuevoItem = new ListViewItem(transporte.ruc);
                    nuevoItem.SubItems.Add(transporte.razonSocial);

                    this.lvwListado.Items.Add(nuevoItem);
                }
            }
            else if (this.TipoListado == TipoLista.USUARIO)
            {
                foreach (Usuario usuario in ((ListaUsuario)this.listadoObjetos).lista)
                {
                    nuevoItem = new ListViewItem(usuario.codUsuario);
                    nuevoItem.SubItems.Add(usuario.nombresyApellidos);

                    this.lvwListado.Items.Add(nuevoItem);
                }
            }
            else if (this.TipoListado == TipoLista.TIENDA)
            {
                foreach (Tienda tienda in ((ListaTienda)this.listadoObjetos).lista)
                {
                    nuevoItem = new ListViewItem(tienda.codigo);
                    nuevoItem.SubItems.Add(tienda.nombre);

                    this.lvwListado.Items.Add(nuevoItem);
                }
            }
            else if (this.TipoListado == TipoLista.PRODUCTOUNION)
            {
                foreach (Producto producto in ((ListaProducto)this.listadoObjetos).lista)
                {
                    nuevoItem = new ListViewItem(producto.codProductoProveedor);
                    nuevoItem.SubItems.Add(producto.descripcion);

                    this.lvwListado.Items.Add(nuevoItem);

                }
            }

            else if (this.TipoListado == TipoLista.PRODUCTOCOMPONENTE)
            {
                foreach (Producto producto in ((ListaProducto)this.listadoObjetos).lista)
                {
                    nuevoItem = new ListViewItem(producto.codProductoProveedor);
                    nuevoItem.SubItems.Add(producto.descripcion);

                    this.lvwListado.Items.Add(nuevoItem);
                }
            }
            
            // Actualizando listado con items nuevos
            this.lvwListado.EndUpdate();

            // Mostrar el total de registros encontrados
            this.lblTotalRegistros.Text = string.Format(FORMATO_TOTAL_ENCONTRADOS, this.lvwListado.Items.Count);
        }

        private string obtenerOperacion()
        {
            string numeroOperacion = string.Empty;

            if (this.TipoListado == TipoLista.PROVEEDOR)
            {
                numeroOperacion = Constantes.OPERACION_LISTAR_PROVEEDORES;   
            }
            else if (this.TipoListado == TipoLista.CLIENTE)
            {
                numeroOperacion = Constantes.OPERACION_LISTAR_CLIENTES;
            }
            else if (this.TipoListado == TipoLista.TRANSPORTE)
            {
                numeroOperacion = Constantes.OPERACION_LISTAR_TRANSPORTES;
            }
            else if (this.TipoListado == TipoLista.USUARIO)
            {
                numeroOperacion = Constantes.OPERACION_LISTAR_USUARIOS;
            }
            else if (this.TipoListado == TipoLista.TIENDA)
            {
                numeroOperacion = Constantes.OPERACION_LISTAR_TIENDAS;
            }
            else if (this.TipoListado == TipoLista.PRODUCTOUNION)
            {
                numeroOperacion = Constantes.OPERACION_LISTAR_PRODUCTOS;
            }
            else if (this.TipoListado == TipoLista.PRODUCTOCOMPONENTE)
            {
                numeroOperacion = Constantes.OPERACION_LISTAR_PRODUCTOS;
            }

            
            return numeroOperacion;
        }

        private void agregarCriterioOperacion(Operacion operacion, string codigo, string valor)
        {
            if (this.TipoListado == TipoLista.PROVEEDOR)
            {
                operacion.proveedor = new Proveedor();
                operacion.proveedor.identificacion = string.Empty;
                operacion.proveedor.razonSocial = string.Empty;
                operacion.proveedor.estado = Constantes.ESTADO_CODIGO_ACTIVO;

                switch (codigo)
                {
                    case CAMPO_PROV_IDENTIFICACION_CODIGO:
                        operacion.proveedor.identificacion = valor;
                        break;
                    case CAMPO_PROV_RAZONSOCIAL_CODIGO:
                        operacion.proveedor.razonSocial = valor;
                        break;
                }
            }
            else if (this.TipoListado == TipoLista.CLIENTE)
            {
                operacion.cliente = new Cliente();
                operacion.cliente.nroDocumento = string.Empty;
                operacion.cliente.razonSocial = string.Empty;
                operacion.cliente.estado = Constantes.ESTADO_CODIGO_ACTIVO;

                switch (codigo)
                {
                    case CAMPO_CLIE_NRODOCUMENTO_CODIGO:
                        operacion.cliente.nroDocumento = valor;
                        break;
                    case CAMPO_CLIE_RAZONSOCIAL_CODIGO:
                        operacion.cliente.razonSocial = valor;
                        break;
                }
            }
            else if (this.TipoListado == TipoLista.TRANSPORTE)
            {
                operacion.transporte = new Transporte();
                operacion.transporte.ruc = string.Empty;
                operacion.transporte.razonSocial = string.Empty;
                operacion.transporte.estado = Constantes.ESTADO_CODIGO_ACTIVO;

                switch (codigo)
                {
                    case CAMPO_TRAN_RUC_CODIGO:
                        operacion.transporte.ruc = valor;
                        break;
                    case CAMPO_TRAN_RAZONSOCIAL_CODIGO:
                        operacion.transporte.razonSocial = valor;
                        break;
                }
            }
            else if (this.TipoListado == TipoLista.USUARIO)
            {
                operacion.usuario = new Usuario();
                operacion.usuario.nombres = string.Empty;
                operacion.usuario.apellidos = string.Empty;
                operacion.usuario.estado = Constantes.ESTADO_CODIGO_ACTIVO;

                switch (codigo)
                {
                    case CAMPO_USUA_NOMBRES_CODIGO:
                        operacion.usuario.nombres = valor;
                        break;
                    case CAMPO_USUA_APELLIDOS_CODIGO:
                        operacion.usuario.apellidos = valor;
                        break;
                }
            }
            else if (this.TipoListado == TipoLista.TIENDA)
            {
                operacion.tienda = new Tienda();
                operacion.tienda.codigo = Constantes.VALOR_CERO;
                operacion.tienda.nombre = string.Empty;
                operacion.tienda.estado = Constantes.ESTADO_CODIGO_ACTIVO;

                switch (codigo)
                {
                    case CAMPO_TIEN_CODIGO_CODIGO:
                        operacion.tienda.codigo = valor;
                        break;
                    case CAMPO_TIEN_NOMBRE_CODIGO:
                        operacion.tienda.nombre = valor;
                        break;
                }
            }
            else if (this.TipoListado == TipoLista.PRODUCTOUNION)
            {
                operacion.producto = new Producto();
                operacion.producto.codProductoProveedor = string.Empty;
                operacion.producto.descripcion = string.Empty;

                operacion.producto.nivelColor = new NivelColor();
                operacion.producto.nivelColor.codigo = Constantes.VALOR_CERO;

                operacion.producto.nivelMaterial = new NivelMaterial();
                operacion.producto.nivelMaterial.codigo = Constantes.VALOR_CERO;

                operacion.producto.nivelProducto = new NivelProducto();
                operacion.producto.nivelProducto.codigo = Constantes.VALOR_CERO;

                operacion.producto.nivelTipo = new NivelTipo();
                operacion.producto.nivelTipo.codigo = Constantes.VALOR_CERO;

                operacion.producto.estado = Constantes.ESTADO_CODIGO_ACTIVO;
                operacion.producto.unionProducto = Constantes.SI;
                //operacion.producto.componentes = string.Empty;

                switch (codigo)
                {
                    case CAMPO_PROD_CODIGO_CODIGOPRODUCTOPROVEEDOR:
                        operacion.producto.codProductoProveedor = valor;
                        break;
                    case CAMPO_PROD_NOMBRE_CODIGO:
                        operacion.producto.descripcion = valor;
                        break;
                }
            }

            else if (this.TipoListado == TipoLista.PRODUCTOCOMPONENTE)
            {
                operacion.producto = new Producto();
                operacion.producto.codProductoProveedor = string.Empty;
                operacion.producto.descripcion = string.Empty;

                operacion.producto.nivelColor = new NivelColor();
                operacion.producto.nivelColor.codigo = Constantes.VALOR_CERO;

                operacion.producto.nivelMaterial = new NivelMaterial();
                operacion.producto.nivelMaterial.codigo = Constantes.VALOR_CERO;

                operacion.producto.nivelProducto = new NivelProducto();
                operacion.producto.nivelProducto.codigo = Constantes.VALOR_CERO;

                operacion.producto.nivelTipo = new NivelTipo();
                operacion.producto.nivelTipo.codigo = Constantes.VALOR_CERO;

                operacion.producto.estado = Constantes.ESTADO_CODIGO_ACTIVO;
                operacion.producto.unionProducto = string.Empty;
                //operacion.producto.componentes = Constantes.SI;

                switch (codigo)
                {
                    case CAMPO_PROD_CODIGO_CODIGOPRODUCTOPROVEEDOR:
                        operacion.producto.codProductoProveedor = valor;
                        break;
                    case CAMPO_PROD_NOMBRE_CODIGO:
                        operacion.producto.descripcion = valor;
                        break;
                }
            }

        }

  
        private bool validarEntradaListado()
        {
            int totalSeleccionados = this.lvwListado.SelectedIndices.Count;

            if (totalSeleccionados <= 0)
            {
                Util.CampoNecesario(this.lvwListado, "Debe selecionar un fila", this.Text);
                return true;
            }

            return false;
        }

        private void aceptarSeleccion()
        {
            if (this.listadoObjetos == null) { return; }

            try
            {
                if (validarEntradaListado()) { return; }

                int indiceItemSeleccionado = this.lvwListado.SelectedIndices[0];

                if (this.TipoListado == TipoLista.PROVEEDOR)
                {
                    this.ItemSeleccionado = ((ListaProveedor)this.listadoObjetos).lista[indiceItemSeleccionado];
                }
                else if (this.TipoListado == TipoLista.CLIENTE)
                {
                    this.ItemSeleccionado = ((ListaCliente)this.listadoObjetos).lista[indiceItemSeleccionado];
                }
                else if (this.TipoListado == TipoLista.TRANSPORTE)
                {
                    this.ItemSeleccionado = ((ListaTransporte)this.listadoObjetos).lista[indiceItemSeleccionado];
                }
                else if (this.TipoListado == TipoLista.USUARIO)
                {
                    this.ItemSeleccionado = ((ListaUsuario)this.listadoObjetos).lista[indiceItemSeleccionado];
                }
                else if (this.TipoListado == TipoLista.TIENDA)
                {
                    this.ItemSeleccionado = ((ListaTienda)this.listadoObjetos).lista[indiceItemSeleccionado];
                }
                else if (this.TipoListado == TipoLista.PRODUCTOUNION)
                {
                    this.ItemSeleccionado = ((ListaProducto)this.listadoObjetos).lista[indiceItemSeleccionado];
                }
                else if (this.TipoListado == TipoLista.PRODUCTOCOMPONENTE)
                {
                    this.ItemSeleccionado = ((ListaProducto)this.listadoObjetos).lista[indiceItemSeleccionado];
                }

                salir(DialogResult.OK);
            }
            catch (Exception ex)
            {
                Util.MensajeError(ex, this.Text);
            }
        }

        private void salir(DialogResult respuesta)
        {
            this.DialogResult = respuesta;
        }
        #endregion

        private void cboFiltro_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

      }
}